/*
 * AqueousActivity.h
 *
 *  Created on: 19 Aug 2011
 *      Author: Allan
 */

#ifndef AQUEOUSACTIVITY_H_
#define AQUEOUSACTIVITY_H_

// C++ includes
#include <functional>
using namespace std;
using namespace std::placeholders;

// GeoReact includes
#include "../Types.h"
#include "AuxiliaryActivity.h"

// GeoReact forward declarations
class ElectrolyteSolution;

class AqueousActivity : public AuxiliaryActivity
{
public:
	AqueousActivity();
	
	explicit 
	AqueousActivity(const vector<string>& species);
	
	virtual 
	~AqueousActivity();
	
	virtual const VectorXd
	Activities(double T, double P, const VectorXd& n) const;
	
private:
	/// The index of the water species
	Index iH2O;
};

const ActivityCoefficient
IdealAqueousModel(const ElectrolyteSolution& sol);

const ActivityCoefficient
HkfIonicModel(const ElectrolyteSolution& sol, const string& ion);

const ActivityCoefficient
HkfWaterModel(const ElectrolyteSolution& sol);

const ActivityCoefficient
SetschenowModel(const ElectrolyteSolution& sol);

const ActivityCoefficient
SetschenowModel(const ElectrolyteSolution& sol, double b);

const ActivityCoefficient
SetschenowModel(const ElectrolyteSolution& sol, const vector<double>& bi, const vector<double>& Ti);

const ActivityCoefficient
DrummondCO2Model(const ElectrolyteSolution& sol);

#endif /* AQUEOUSACTIVITY_H_ */
